package ar.edu.unrn.lia.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

@Entity
@Table(name = "barrio")
public class Barrio extends BaseEntity implements Serializable {

	private static final long serialVersionUID = 6667293934207987614L;
	
	public enum Zona {
		CM("Comercial"),RE("Recidencial"), IN("Industrial"), RU("Rural");

		private String valor;

		private Zona(String valor) {
			this.valor = valor;
		}

		@Override
		public String toString() {
			return valor;
		}
	}

	private String descripcion;

	private Zona zona;

	private Ciudad ciudad;

//	private String viviendas;
//
//	private String construccion;
//
//	private String topografiaNivel;
//
//	private String topografiaInundable;
//
//	private String transporte;
//
//	private String vecinos;
//
//	private Integer densidadEdificada;
	
	private List<PuntoInteres> puntosInteres = new ArrayList<PuntoInteres>(0);

	public Barrio() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "barrio", fetch = FetchType.LAZY)	
	public List<PuntoInteres> getPuntosInteres() {
		return puntosInteres;
	}



	public void setPuntosInteres(List<PuntoInteres> puntosInteres) {
		this.puntosInteres = puntosInteres;
	}



	@NotNull(message = "{name.notnull}")
	@Column(name = "description", nullable = false)
	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	@NotNull(message = "{name.notnull}")
	@ManyToOne(fetch = FetchType.EAGER, optional = false)
	@JoinColumn(name = "ciudad_id", nullable = false, referencedColumnName = "id")
	public Ciudad getCiudad() {
		return ciudad;
	}

	public void setCiudad(Ciudad ciudad) {
		this.ciudad = ciudad;
	}

	@Enumerated(EnumType.STRING)
	@NotNull(message = "{name.notnull}")
	public Zona getZona() {
		return zona;
	}

	public void setZona(Zona zona) {
		this.zona = zona;
	}

	
	
	public void agregarPuntoInteres(PuntoInteres pi)
	{
		pi.setBarrio(this);
		getPuntosInteres().add(pi);
	}
	public void eliminarPuntoInteres(PuntoInteres pi)
	{
		pi.setBarrio(null);
		getPuntosInteres().remove(pi);
	}

}
